package com.zjsru.plan2024.oneday;

/**
 * 2748. 美丽下标对的数目
 * @Author: cookLee
 * @Date: 2024-06-20
 */
public class CountBeautifulPairs {

    /**
     * 主
     * \
     * 输入：nums = [2,5,1,4]
     * 输出：5
     * 解释：nums 中共有 5 组美丽下标对：
     * i = 0 和 j = 1 ：nums[0] 的第一个数字是 2 ，nums[1] 的最后一个数字是 5 。2 和 5 互质，因此 gcd(2,5) == 1 。
     * i = 0 和 j = 2 ：nums[0] 的第一个数字是 2 ，nums[2] 的最后一个数字是 1 。2 和 1 互质，因此 gcd(2,1) == 1 。
     * i = 1 和 j = 2 ：nums[1] 的第一个数字是 5 ，nums[2] 的最后一个数字是 1 。5 和 1 互质，因此 gcd(5,1) == 1 。
     * i = 1 和 j = 3 ：nums[1] 的第一个数字是 5 ，nums[3] 的最后一个数字是 4 。5 和 4 互质，因此 gcd(5,4) == 1 。
     * i = 2 和 j = 3 ：nums[2] 的第一个数字是 1 ，nums[3] 的最后一个数字是 4 。1 和 4 互质，因此 gcd(1,4) == 1 。
     * 因此，返回 5 。
     * \
     * 输入：nums = [11,21,12]
     * 输出：2
     * 解释：共有 2 组美丽下标对：
     * i = 0 和 j = 1 ：nums[0] 的第一个数字是 1 ，nums[1] 的最后一个数字是 1 。gcd(1,1) == 1 。
     * i = 0 和 j = 2 ：nums[0] 的第一个数字是 1 ，nums[2] 的最后一个数字是 2 。gcd(1,2) == 1 。
     * 因此，返回 2 。
     * \
     * @param args args
     */
    public static void main(String[] args) {
        CountBeautifulPairs countBeautifulPairs = new CountBeautifulPairs();
        int[] nums = new int[]{2,5,1,4};
        System.out.println(countBeautifulPairs.countBeautifulPairs(nums));
    }

    /**
     * 暴力枚举
     *
     * @param nums nums
     * @return int
     */
    public int countBeautifulPairs(int[] nums) {
        int ans = 0;
        int len = nums.length;
        for (int i = 0; i < len; i++) {
            while (nums[i] >= 10) {
                nums[i] /= 10;
            }
            for (int j = i + 1; j < len; j++) {
                if (this.helper(nums[i], nums[j] % 10) == 1) {
                    ans++;
                }
            }
        }
        return ans;
    }

    /**
     * 帮手
     * 计算质数助手类
     *
     * @param num1 num1
     * @param num2 num2
     * @return int
     */
    private int helper(int num1, int num2) {
        return num2 == 0 ? num1 : this.helper(num2,num1 % num2);
    }
}
